KGDB 内核调试指南
内核有两个不同的调试器前端(kdb和kgdb),它们连接到调试核心。如果在编译和运行时正确配置了内核,则可以使用两个调试器前端中的任何一个并在它们之间动态转换。
Kdb是简单化的shell风格的界面,可以在带有键盘或串行控制台的系统控制台上使用。您可以使用它来检查内存,寄存器,进程列表,dmesg,甚至设置断点以停在特定位置。尽管您可以设置断点并执行一些基本的内核运行控制,但Kdb并不是源代码级调试器。 Kdb主要旨在进行一些分析,以帮助开发或诊断内核问题。如果代码是使用CONFIG_KALLSYMS构建的,则可以按名称访问内核内置文件或内核模块中的某些符号。
Kgdb旨在用作Linux内核的源代码级调试器。它与gdb一起用于调试Linux内核。期望gdb可用于“侵入”内核以检查内存,变量并查看调用堆栈信息,类似于应用程序开发人员使用gdb调试应用程序的方式。可以在内核代码中放置断点并执行一些有限的执行步骤。
使用kgdb需要两台机器。其中一台机器是开发机器,另一台是目标机器。要调试的内核在目标计算机上运行。开发机器针对包含符号的vmlinux文件运行gdb实例(不是启动映像,如bzImage,zImage,uImage…)。在gdb中,开发人员指定连接参数并连接到kgdb。开发人员与gdb建立的连接类型取决于在测试计算机内核中编译为内置模块或可加载内核模块的kgdb I / O模块的可用性。
编译内核
在 menuconfig 中开启 CONFIG_KGDB
Symbol: KGDB [=y]
Type : bool
Defined at lib/Kconfig.kgdb:11
Prompt: KGDB: kernel debugger
Depends on: HAVE_ARCH_KGDB [=y] && DEBUG_KERNEL [=y]
Location:
-> Kernel hacking
(1) -> Generic Kernel Debugging Instruments